package com.bwie;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world!");

        //1.给定一个字符串数组，编写一个程序，找出所有长度大于等于5的字符串，并按字母顺序排序。

        String[] s1 = {"adefsda","wetres","qweqw","defsd"};
        List<String> collect = Arrays.stream(s1).filter(s -> s.length() >= 5).sorted().collect(Collectors.toList());
        System.out.println("第一题"+collect);

        //2给定一个整数数组，编写一个程序，计算数组中所有偶数的平均值。
        int[] sry2 = {1,2,3,4,5,6};
        double v = Arrays.stream(sry2).filter(n -> n % 2 == 0).average().orElse(0.0);
        System.out.println("第二题"+v);
        //3给定一个字符串数组，编写一个程序，计算所有字符串中字符'a'出现的次数。
        //要求：
        //1.使用Stream API完成任务。
        //2.输出结果。
        String[] sry3 = {"appasasd","banasda","cat","dog","ele"};
        long count = Arrays.stream(sry3).flatMapToInt(CharSequence::chars)
                .filter(c -> c == 'a').count();
        System.out.println("第三题"+count);

        //4给定一个整数数组，编写一个程序，去除重复的元素，并按升序排序。
        //要求：
        //1.使用Stream API完成任务。
        //2.输出结果。
        int[] sry4 = {6,2,4,3,5,1};
        int[] ints = Arrays.stream(sry4).distinct().sorted().toArray();
        System.out.println("第四题"+Arrays.toString(ints));
        //5给定一个用户列表，编写一个程序，筛选出年龄大于等于18岁并且名字长度大于等于5的用户，并按照名字长度降序排列。
        //要求：
        //1.使用Stream API完成任务。
        //2.输出结果。
        List<User> users = Arrays.asList(
                new User("zhangsan", 18),
                new User("lisi", 22),
                new User("wangwu", 20),
                new User("zhaoliu", 25),
                new User("tianqi", 18)
        );
        List<User> collect1 = users.stream().filter(user -> user.getAge() >= 18)
                .filter(user -> user.getName().length() >= 5)
                .sorted(Comparator.comparingInt((User u) -> u.getName().length()).reversed())
                .collect(Collectors.toList());
        System.out.println("第五题");
        collect1.forEach(System.out::println);

        //6给定一个整数数组，编写一个程序，计算数组中所有元素的总和。
        //要求：
        //1.使用Stream API完成任务。
        //2.输出结果。
        int[] sry6 = {6,2,4,3,5,1};
        int sum = Arrays.stream(sry6).sum();
        System.out.println("第六题"+sum);
        //7给定一个字符串数组，编写一个程序，将所有字符串拼接成一个大字符串。
        //要求：
        //1.使用Stream API完成任务。
        //2.输出结果。
        String[] sry7 = {"appasasd","","cat","dog","!"};
        String collect2 = Arrays.stream(sry7).collect(Collectors.joining());
        System.out.println("第7题"+collect2);
        //8给定一个整数数组，编写一个程序，计算数组中所有元素的平方和。
        //要求：
        //1.使用Stream API完成任务。
        //2.输出结果。
        int[] sry8 = {6,2,4,3,5,1};
        int sum1 = Arrays.stream(sry8).map(x -> x * x).sum();
        System.out.println("第8题"+sum1);

        //9给定一个字符串数组，编写一个程序，去除重复的字符串，并统计每个字符串出现的次数。
        //要求：
        //1.使用Stream API完成任务。
        //2.输出结果。
        String[] sry9 = {"appasasd","banasda","cat","dog","ele"};
        Map<String, Long> collect3 = Arrays.stream(sry9).collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
        collect3.forEach((str,count1)-> System.out.println("第9题"+str+":"+count1));

        //10给定一个用户列表，编写一个程序，筛选出年龄大于等于18岁的用户，并将每个用户的姓名转换为大写形式。
        //要求：
        //1.使用Stream API完成任务。
        List<User> users1 = Arrays.asList(
                new User("zhangsan", 18),
                new User("lisi", 22),
                new User("wangwu", 20),
                new User("zhaoliu", 25),
                new User("tianqi", 18)
        );
        List<User> collect4 = users.stream().filter(user -> user.getAge() > 18).collect(Collectors.toList());
        System.out.println("第十题"+collect4);

    }
}